﻿using System;
using System.Data;
using System.Data.OracleClient;
using System.Data.SqlClient;
using System.Collections;
using System.Configuration;
using System.Xml;
using System.Windows.Forms;
using MigColetaMinMax.DAO.DAO_Oracle;
using MigColetaMinMax.Entidades;

namespace MigColetaMinMax.DAO
{
    public class ORAMSDataAccess : ORAIDataAccess
    {        
        private OracleConnection conexao;

        #region Contrutores

        /// <summary>
        /// Inicializa a classe de conexão com Banco de Dados.
        /// </summary>
        public ORAMSDataAccess()
        {
            string stringconexao = @"Data Source=dev; Persist Security Info=True;User ID=system;Password=sulgipe2010";
            conexao = new OracleConnection(stringconexao);
        }

        /// <summary>
        /// Inicializa a classe de conexão com Banco de Dados.
        /// </summary>
        /// <param name="stringConexao">stringConexao</param>
        public ORAMSDataAccess(string stringConexao)
        {
            string stringconexao = stringConexao;
            conexao = new OracleConnection(stringconexao);
        }

        #endregion

        #region AbrirConexao

        /// <summary>
        /// Abre a conexão com o Banco.
        /// </summary>
        public void AbrirConexao()
        {
            conexao.Open();
        }

        #endregion

        #region FecharConexao

        /// <summary>
        /// Fecha a conexão com o Banco.
        /// </summary>
        public void FecharConexao()
        {
            conexao.Close();
        }

        #endregion

        #region ExecutaConsulta
        
        /// <summary>
        /// Executa uma consulta a partir de um comando registrado e repassado.
        /// </summary>
        /// <param name="query">Id do comando registrado</param>
        /// <param name="htParametros">Parâmetros utilizados pela consulta</param>
        /// <returns>DataTable</returns>
        public DataTable ExecutaConsultaMigracao(Hashtable htParametros)
        {            
            try
            {
                AbrirConexao();

                int i = 0;
                int grp=0;
                string data = string.Empty;

                DataTable dtt = new DataTable();
                if (htParametros != null)
                {
                    foreach (object chave in htParametros.Keys)
                    {
                        i++;
                
                        if (i == 1)
                        {
                            grp = int.Parse(htParametros[chave].ToString());
                        }
                        else
                        {
                            data = htParametros[chave].ToString();
                        }
                    }
                }


                string sql = @"select mat as MATRICULA, (select Nome from E2.cgLeiturista where IdLeiturista = mat) as LEITURISTA, rm as REMESSA, mf as MÊS, 
                                      min(ordem) as MÍNIMO, max(ordem) as MÁXIMO
                                  from (select idleiturista as mat, idgrupofat as rm, 
                                            to_char(ano_mes,'mmyyyy') as mf, LPAD(sequencia_leit,6,0) as ordem 
                                        from (select * from E2.cggrupo_leiturista_rota 
                                              where idgrupofat=:GF and ano_mes = to_date(:data,'ddmmyyyy') and idleiturista>0), 
                                             (select idrota as rota, sequencia_leit from E2.calculo_dados where ano_mes = to_date(:data,'ddmmyyyy') 
                                                            and idgrupofat =:GF) where idrota = rota ) group by mat, rm, mf order by 2,1,3,4,5";

                OracleCommand comando = new OracleCommand(sql, this.conexao);
                comando.Parameters.Add(new OracleParameter(":GF",OracleType.Int16)).Value = grp;
                comando.Parameters.Add(new OracleParameter(":data", OracleType.VarChar)).Value = data.ToString();

                try
                {
                    OracleDataAdapter adapter = new OracleDataAdapter(comando);
                    adapter.Fill(dtt);                    
                }
                catch (Exception ex)
                {
                    MessageBox.Show("Mensagem do Banco Oracle: " + ex.Message);
                    throw new Exception(ex.Message);
                }

                return dtt;
            }
            finally
            {
                FecharConexao();
            }
        }

        public DataTable ExecutaConsultaHistorico(string query, Hashtable htParametros)
        {
            try
            {
                AbrirConexao();
                                
                int grp = 0;
                
                DataTable dtt = new DataTable();
                if (htParametros != null)
                {
                    foreach (object chave in htParametros.Keys)
                    {   
                        grp = int.Parse(htParametros[chave].ToString());                        
                    }
                }

                string sql = @"SELECT E2CLR.IdGrupoFat Remessa, E2CLR.IdRota Rota, to_Char(E2CLR.ano_mes ,'mm/yyyy') Mês,                                              
                                    E2CLR.IdLeiturista Matricula, E2L.NOME Leiturista
                                FROM E2.cggrupo_leiturista_rota E2CLR JOIN E2.cgLeiturista E2L ON E2CLR.IdLeiturista = E2L.IdLeiturista                                                         
                                WHERE E2CLR.idgrupofat=:GF and E2CLR.idleiturista > 0 Order by 2, to_char(E2CLR.ano_mes,'yyyymm') desc";

                OracleCommand comando = new OracleCommand(sql, this.conexao);
                comando.Parameters.Add(new OracleParameter(":GF",OracleType.Int16)).Value = grp;

                try
                {                    
                    OracleDataAdapter adapter = new OracleDataAdapter(comando);
                    adapter.Fill(dtt);
                }
                catch (Exception ex)
                {
                    MessageBox.Show("Mensagem do Banco Oracle: " + ex.Message);
                    throw new Exception(ex.Message);
                }

                return dtt;
            }
            finally
            {
                FecharConexao();
            }
        }

        public DataTable ExecutaConsultaRotas(Hashtable htParametros)
        {                

                int rota = 0;
                
                DataTable dt = new DataTable();
                if (htParametros != null)
                {
                    foreach (object chave in htParametros.Keys)
                    {                                                
                        rota = int.Parse(htParametros[chave].ToString());                        
                    }
                }

                string sql = @"select mat as Matricula, (select Nome from E2.cgLeiturista where IdLeiturista = mat) as Leiturista, rm as Remessa, mf as MÊS, 
                                      min(ordem) as Minimo, max(ordem) as Máximo
                                  from (select idleiturista as mat, idgrupofat as rm, 
                                            to_char(ano_mes,'mm/yyyy') as mf, LPAD(sequencia_leit,6,0) as ordem 
                                        from (select * from E2.cggrupo_leiturista_rota 
                                              where idRota = :idrota and idleiturista>0), 
                                                    (select idrota as rota, sequencia_leit from E2.calculo_dados where idRota = :idrota) 
                                        where idrota = rota ) group by mat, rm, mf order by 4 DESC";

                try
                {
                    AbrirConexao();
                    OracleCommand comando = new OracleCommand(sql, this.conexao);
                    comando.Parameters.Add(new OracleParameter(":idrota", OracleType.Int16)).Value = rota;
                    OracleDataAdapter adapter = new OracleDataAdapter(comando);
                    adapter.Fill(dt);
                    FecharConexao();
                }
                catch (Exception)
                {
                    FecharConexao();
                    throw;
                }

                return dt;            

        }

        #region Controle Windows Mobile

        public DataTable ObterLeiturista(int matricula)
        {
            try
            {
                AbrirConexao();

                DataTable dtt = new DataTable();
                
                string sql = @"select *
                                from E2.cgLeiturista
                                where IDLEITURISTA = :Matricula";

                OracleCommand comando = new OracleCommand(sql, this.conexao);
                comando.Parameters.Add(new OracleParameter(":matricula", OracleType.Int16)).Value = matricula;

                try
                {
                    OracleDataAdapter adapter = new OracleDataAdapter(comando);
                    adapter.Fill(dtt);
                }
                catch (Exception ex)
                {
                    MessageBox.Show("Mensagem do Banco Oracle: " + ex.Message);
                    throw new Exception(ex.Message);
                }

                return dtt;
            }
            finally
            {
                FecharConexao();
            }
        }

        public DataTable ExecutaConsultaDadosParaControle(int grupoFat, string mesFat, int matricula)
        {
            try
            {
                AbrirConexao();

                DataTable dtt = new DataTable();

                string sql = @"Select cgR.IDLEITURISTA as Matricula, cgL.NOME as LEITURISTA, 
                                       cgR.IDGRUPOFAT as GRUPOFAT, to_char(cgR.ANO_MES,'dd/mm/yyyy') as MESFAT, 
                                       cgL.DIRETORIO_EXP, clM.LEITURA as DtLeituraFinal, cgR.IDROTA 
                                From E2.cggrupo_leiturista_rota cgR
                                join calendario_leitura_mensal clM
                                    on clM.IDCALENDARIO = cgR.IDGRUPOFAT And clM.COMPETENCIA = cgR.ANO_MES
                                Join E2.cgLeiturista cgL
                                    on cgL.IDLEITURISTA = cgR.IDLEITURISTA 
                                Where cgR.IDLEITURISTA =:matricula And cgR.ANO_MES = TO_DATE(:mesFat ,'dd/mm/yyyy') and cgR.IDGRUPOFAT = :grupoFat And cgL.ATIVO = 'S'";

                OracleCommand comando = new OracleCommand(sql, this.conexao);
                comando.Parameters.Add(new OracleParameter(":grupoFat", OracleType.Int16)).Value = grupoFat;
                comando.Parameters.Add(new OracleParameter(":mesFat", OracleType.VarChar)).Value = mesFat;
                comando.Parameters.Add(new OracleParameter(":matricula", OracleType.Int16)).Value = matricula;

                try
                {
                    OracleDataAdapter adapter = new OracleDataAdapter(comando);
                    adapter.Fill(dtt);
                }
                catch (Exception ex)
                {
                    MessageBox.Show("Mensagem do Banco Oracle: " + ex.Message);
                    throw new Exception(ex.Message);
                }

                return dtt;
            }
            finally
            {
                FecharConexao();
            }
        }

        #endregion

        #region Retorno Windows Mobile

        public void InsereRetornoLeituras_WM(Roteiro roteiro)
        {
            try
            {
                AbrirConexao();

                string sql = @"INSERT INTO E2.UC_LEIT_COORDENADAS (iduc, nr_medidor_kwh, idgrupofat, ano_Mes, idrota,
                                        leitura_lida, data_leitura, data_satelite, mens_1, mens_2, mens_3, mens_4,
                                        utm_x,utm_y, latitude,longitude,lat_degress,lng_degress,cal_distancia,tempo_percorrido,
                                        matricula, id_Foto, Foto, leiturista, acertos)
                                VALUES (:iduc, :nr_medidor_kwh, :idGrupoFat, :mesAno, :idRota, :leituraLida,
                                        :dataLeitura, :dataSatelite, :mens1, :mens2, :mens3, :mens4,
                                        :utm_x, :utm_y, :latitude, :longitude, :latDegress, :lngDegress, :calDistancia, :tempoPercorrido,
                                        :matricula, :idFoto,:fotoDigital,:leiturista, :acertos)";

                foreach (var leitura in roteiro.Leituras)
                {
                    OracleCommand comando = new OracleCommand(sql, this.conexao);

                    comando.Parameters.Add(new OracleParameter(":iduc", OracleType.Number, 9)).Value = int.Parse(leitura.Uc);
                    comando.Parameters.Add(new OracleParameter(":nr_medidor_kwh", OracleType.Number, 9)).Value = int.Parse(leitura.Medidor);
                    comando.Parameters.Add(new OracleParameter(":idGrupoFat", OracleType.Number, 9)).Value = roteiro.Remessa;
                    comando.Parameters.Add(new OracleParameter(":mesAno", OracleType.VarChar, 10)).Value = roteiro.Mesfat.ToString();
                    comando.Parameters.Add(new OracleParameter(":idRota", OracleType.Number, 9)).Value = int.Parse(leitura.IdRota);
                    comando.Parameters.Add(string.IsNullOrWhiteSpace(leitura.LeituraAtual)
                        ? new OracleParameter(":leituraLida", DBNull.Value) 
                        : new OracleParameter(":leituraLida", leitura.LeituraAtual));                    
                    comando.Parameters.Add(new OracleParameter(":dataLeitura", OracleType.VarChar, 10)).Value = leitura.DataLeitura;
                    comando.Parameters.Add(new OracleParameter(":dataSatelite", OracleType.Timestamp, 6)).Value = leitura.DtHrSat;
                    comando.Parameters.Add(new OracleParameter(":mens1", OracleType.VarChar, 3)).Value = leitura.Ocorrencia1;
                    comando.Parameters.Add(new OracleParameter(":mens2", OracleType.VarChar, 3)).Value = leitura.Ocorrencia2;
                    comando.Parameters.Add(new OracleParameter(":mens3", OracleType.VarChar, 3)).Value = leitura.Ocorrencia3;
                    comando.Parameters.Add(new OracleParameter(":mens4", OracleType.VarChar, 3)).Value = leitura.Ocorrencia4;
                    comando.Parameters.Add(new OracleParameter(":utm_x", OracleType.VarChar, 15)).Value = leitura.UTM_x;
                    comando.Parameters.Add(new OracleParameter(":utm_y", OracleType.VarChar, 15)).Value = leitura.UTM_y;
                    comando.Parameters.Add(new OracleParameter(":latitude", OracleType.VarChar, 15)).Value = leitura.Latitude;
                    comando.Parameters.Add(new OracleParameter(":longitude", OracleType.VarChar, 15)).Value = leitura.Longitude;
                    comando.Parameters.Add(new OracleParameter(":latDegress", OracleType.VarChar, 15)).Value = leitura.LatDegress;
                    comando.Parameters.Add(new OracleParameter(":lngDegress", OracleType.VarChar, 15)).Value = leitura.LngDegress;
                    comando.Parameters.Add(new OracleParameter(":calDistancia", OracleType.Number, 10)).Value = 0;
                    comando.Parameters.Add(new OracleParameter(":tempoPercorrido", OracleType.Timestamp, 6)).Value = DateTime.MinValue;
                    comando.Parameters.Add(new OracleParameter(":matricula", OracleType.VarChar, 4)).Value = roteiro.Leiturista.Matricula;
                    comando.Parameters.Add(new OracleParameter(":leiturista", OracleType.VarChar, 40)).Value = roteiro.Leiturista.Nome;
                    comando.Parameters.Add(new OracleParameter(":idFoto", OracleType.VarChar, 12)).Value = leitura.IdFoto;
                    comando.Parameters.Add(leitura.Foto == null
                        ? new OracleParameter(":fotoDigital", DBNull.Value)
                        : new OracleParameter(":fotoDigital", leitura.Foto));                     
                    comando.Parameters.Add(new OracleParameter(":acertos", OracleType.Int16)).Value = leitura.AcertosLeit;

                    comando.ExecuteNonQuery();
                }
                FecharConexao();
            }
            catch (Exception ex)
            {
                FecharConexao();
                throw new Exception(ex.Message);
            }
        }

        //comando.Parameters.Add(new OracleParameter(":iduc", OracleType.Number, 9)).Value = int.Parse(leitura.Uc);
                    //comando.Parameters.Add(new OracleParameter(":nr_medidor_kwh", OracleType.Number, 9)).Value = int.Parse(leitura.Medidor);
                    //comando.Parameters.Add(new OracleParameter(":idGrupoFat", OracleType.Number, 9)).Value = roteiro.Remessa;
                    //comando.Parameters.Add(new OracleParameter(":mesAno", OracleType.VarChar, 10)).Value = roteiro.Mesfat.ToString();
                    //comando.Parameters.Add(new OracleParameter(":idRota", OracleType.Number, 9)).Value = int.Parse(leitura.IdRota);
                    //comando.Parameters.Add(string.IsNullOrWhiteSpace(leitura.LeituraAtual) 
                    //    ? new OracleParameter(":leituraLida", DBNull.Value)
                    //    : new OracleParameter(":leituraLida", leituraLida));
                    //comando.Parameters.Add(new OracleParameter(":dataLeitura", OracleType.VarChar, 10)).Value = leitura.DataLeitura;
                    //comando.Parameters.Add(new OracleParameter(":dataSatelite", OracleType.Timestamp, 6)).Value = leitura.DtHrSat;
                    //comando.Parameters.Add(new OracleParameter(":mens1", OracleType.VarChar, 3)).Value = leitura.Ocorrencia1;
                    //comando.Parameters.Add(new OracleParameter(":mens2", OracleType.VarChar, 3)).Value = leitura.Ocorrencia2;
                    //comando.Parameters.Add(new OracleParameter(":mens3", OracleType.VarChar, 3)).Value = leitura.Ocorrencia3;
                    //comando.Parameters.Add(new OracleParameter(":mens4", OracleType.VarChar, 3)).Value = leitura.Ocorrencia4;
                    //comando.Parameters.Add(new OracleParameter(":utm_x", OracleType.VarChar, 15)).Value = leitura.UTM_x;
                    //comando.Parameters.Add(new OracleParameter(":utm_y", OracleType.VarChar, 15)).Value = leitura.UTM_y;
                    //comando.Parameters.Add(new OracleParameter(":latitude", OracleType.VarChar, 15)).Value = leitura.Latitude;
                    //comando.Parameters.Add(new OracleParameter(":longitude", OracleType.VarChar, 15)).Value = leitura.Longitude;
                    //comando.Parameters.Add(new OracleParameter(":latDegress", OracleType.VarChar, 15)).Value = leitura.LatDegress;
                    //comando.Parameters.Add(new OracleParameter(":lngDegress", OracleType.VarChar, 15)).Value = leitura.LngDegress;
                    //comando.Parameters.Add(new OracleParameter(":calDistancia", OracleType.Number, 10)).Value = 0;
                    //comando.Parameters.Add(new OracleParameter(":tempoPercorrido", OracleType.Timestamp, 6)).Value = DateTime.MinValue;
                    //comando.Parameters.Add(new OracleParameter(":matricula", OracleType.VarChar, 4)).Value = roteiro.Leiturista.Matricula;
                    //comando.Parameters.Add(new OracleParameter(":leiturista", OracleType.VarChar, 40)).Value = roteiro.Leiturista.Nome;
                    //comando.Parameters.Add(new OracleParameter(":idFoto", OracleType.VarChar, 12)).Value = leitura.IdFoto;
                    //comando.Parameters.Add(new OracleParameter(":fotoDigital", OracleType.Blob)).Value = leitura.Foto;                    
                    //comando.Parameters.Add(new OracleParameter(":acertos", OracleType.Int16)).Value = leitura.AcertosLeit;

        public void ExecutaAtualizacaoRetorno_WM(Retorno obj)
        {
            try
            {
                AbrirConexao();
                
                string sql = string.Empty;

                if (obj.FotoDigital != null)
                {
                    sql = @"INSERT INTO E2.UC_LEIT_COORDENADAS (iduc,nr_medidor_kwh, idgrupofat, ano_Mes, idrota,
                                        leitura_lida,data_leitura,data_satelite,mens_1,mens_2,mens_3,mens_4, utm_x,utm_y,
                                        latitude,longitude,lat_degress,lng_degress,cal_distancia,tempo_percorrido,
                                        id_Foto,Foto,matricula,leiturista)
                                VALUES (:iduc,:nr_medidor_kwh,:idGrupoFat,:mesAno,:idRota,:leituraLida,
                                        :dataLeitura,:dataSatelite,:mens1,:mens2,:mens3,:mens4,
                                        :utm_x,:utm_y,:latitude,:longitude,:latDegress,:lngDegress,
                                        :calDistancia,:tempoPercorrido,:idFoto,:fotoDigital,:matricula,:leiturista)";
                }
                else
                {
                    sql = @"INSERT INTO E2.UC_LEIT_COORDENADAS (iduc,nr_medidor_kwh, idgrupofat, ano_Mes, idrota,
                                        leitura_lida,data_leitura,data_satelite,mens_1,mens_2,mens_3,mens_4, utm_x,utm_y,
                                        latitude,longitude,lat_degress,lng_degress,cal_distancia,tempo_percorrido,matricula,leiturista)
                                VALUES (:iduc,:nr_medidor_kwh,:idGrupoFat,:mesAno,:idRota,:leituraLida,
                                        :dataLeitura,:dataSatelite,:mens1,:mens2,:mens3,:mens4,
                                        :utm_x,:utm_y,:latitude,:longitude,:latDegress,:lngDegress,
                                        :calDistancia,:tempoPercorrido,:matricula,:leiturista)";
                }

                OracleCommand comando = new OracleCommand(sql, this.conexao);
                comando.Parameters.Add(new OracleParameter(":iduc",OracleType.Number)).Value = obj.IdUC;
                comando.Parameters.Add(new OracleParameter(":nr_medidor_kwh", OracleType.Number)).Value = obj.Nr_medidor_kwh;
                comando.Parameters.Add(new OracleParameter(":idGrupoFat", OracleType.Number)).Value = obj.IdGrupoFat;
                comando.Parameters.Add(new OracleParameter(":mesAno", OracleType.VarChar)).Value = obj.Mes_ano;
                comando.Parameters.Add(new OracleParameter(":idRota", OracleType.Number)).Value = obj.IdRota;
                comando.Parameters.Add(new OracleParameter(":leituraLida", OracleType.Number)).Value = obj.Leitura_Lida;
                comando.Parameters.Add(new OracleParameter(":dataLeitura", OracleType.VarChar)).Value = obj.Data_Leitura;
                comando.Parameters.Add(new OracleParameter(":dataSatelite", OracleType.Timestamp)).Value = obj.Data_Satelite;
                comando.Parameters.Add(new OracleParameter(":mens1", OracleType.VarChar)).Value = obj.Mens1;
                comando.Parameters.Add(new OracleParameter(":mens2", OracleType.VarChar)).Value = obj.Mens2;
                comando.Parameters.Add(new OracleParameter(":mens3", OracleType.VarChar)).Value = obj.Mens3;
                comando.Parameters.Add(new OracleParameter(":mens4", OracleType.VarChar)).Value = obj.Mens4;
                comando.Parameters.Add(new OracleParameter(":utm_x", OracleType.VarChar)).Value = obj.Utm_x;
                comando.Parameters.Add(new OracleParameter(":utm_y", OracleType.VarChar)).Value = obj.Utm_y;
                comando.Parameters.Add(new OracleParameter(":latitude", OracleType.VarChar)).Value = obj.Latitude;
                comando.Parameters.Add(new OracleParameter(":longitude", OracleType.VarChar)).Value = obj.Longitude;
                comando.Parameters.Add(new OracleParameter(":latDegress", OracleType.VarChar)).Value = obj.Lat_degress;
                comando.Parameters.Add(new OracleParameter(":lngDegress", OracleType.VarChar)).Value = obj.Lng_degress;
                comando.Parameters.Add(new OracleParameter(":calDistancia", OracleType.Number)).Value = obj.Cal_Distancia;
                comando.Parameters.Add(new OracleParameter(":tempoPercorrido", OracleType.DateTime)).Value = obj.Tempo_percorrido;
                comando.Parameters.Add(new OracleParameter(":matricula", OracleType.VarChar)).Value = obj.Matricula;
                comando.Parameters.Add(new OracleParameter(":leiturista", OracleType.VarChar)).Value = obj.Leiturista;
                
                if (obj.FotoDigital != null)
                {
                    comando.Parameters.Add(new OracleParameter(":idFoto", OracleType.VarChar)).Value = obj.IdFoto;
                    comando.Parameters.Add(new OracleParameter(":fotoDigital", OracleType.Blob)).Value = obj.FotoDigital;
                }
                
                comando.ExecuteNonQuery();
            }
            catch (Exception ex)
            {                
                throw new Exception(ex.Message);
            }             
            finally
            {
                FecharConexao();
            }
        }

        public void ExecutaAtualizacaoRetornoFotosExternas_WM(Retorno obj)
        {
            try
            {
                AbrirConexao();

                string sql = string.Empty;
                                
                sql = @"INSERT INTO E2.fotos_externas (grupo_fat, ano_Mes, id_Foto, Foto, matricula, leiturista, data_foto)
                        VALUES (:idGrupoFat, :mesAno, :idFoto, :fotoDigital, :matricula, :leiturista, :dataFoto)";
                
                OracleCommand comando = new OracleCommand(sql, this.conexao);                
                comando.Parameters.Add(new OracleParameter(":idGrupoFat", OracleType.Number)).Value = obj.IdGrupoFat;
                comando.Parameters.Add(new OracleParameter(":mesAno", OracleType.VarChar)).Value = obj.Mes_ano;                
                comando.Parameters.Add(new OracleParameter(":matricula", OracleType.VarChar)).Value = obj.Matricula;
                comando.Parameters.Add(new OracleParameter(":leiturista", OracleType.VarChar)).Value = obj.Leiturista;                
                comando.Parameters.Add(new OracleParameter(":idFoto", OracleType.VarChar)).Value = obj.IdFoto;
                comando.Parameters.Add(new OracleParameter(":fotoDigital", OracleType.Blob)).Value = obj.FotoDigital;
                comando.Parameters.Add(new OracleParameter(":dataFoto", OracleType.DateTime)).Value = obj.DataFoto;
                
                comando.ExecuteNonQuery();

            }
            catch (Exception ex)
            {
                throw new Exception(ex.Message);
            }
            finally
            {
                FecharConexao();
            }
        }

        public void ExecutaAtualizacaoDeleteRetorno_WM(Roteiro obj)
        {
            try
            {
                AbrirConexao();

                string sql = @"DELETE FROM E2.UC_LEIT_COORDENADAS
                                WHERE idGrupoFat = :idGrupoFat And Ano_Mes = :mesAno";

                OracleCommand comando = new OracleCommand(sql, this.conexao);                
                comando.Parameters.Add(new OracleParameter(":idGrupoFat", OracleType.Number)).Value = obj.Remessa;
                comando.Parameters.Add(new OracleParameter(":mesAno", OracleType.VarChar)).Value = obj.Mesfat;
                
                comando.ExecuteNonQuery();
            }
            catch (Exception ex)
            {
                throw new Exception(ex.Message);
            }
            finally
            {
                FecharConexao();
            }
        }


        public void ExecutaAtualizacaoDeleteRetornoFotosExternas_WM(Retorno obj)
        {
            try
            {
                AbrirConexao();

                string sql = @"DELETE FROM E2.fotos_externas
                                WHERE Grupo_Fat = :idGrupoFat And 
                                      Ano_Mes = :mesAno";

                OracleCommand comando = new OracleCommand(sql, this.conexao);
                comando.Parameters.Add(new OracleParameter(":idGrupoFat", OracleType.Number)).Value = obj.IdGrupoFat;
                comando.Parameters.Add(new OracleParameter(":mesAno", OracleType.VarChar)).Value = obj.Mes_ano;
                                
                comando.ExecuteNonQuery();
            }
            catch (Exception ex)
            {
                throw new Exception(ex.Message);
            }
            finally
            {
                FecharConexao();
            }
        }

        public DataTable ExecutaConsultaExistRetorno_WM(Roteiro obj)
        {
            try
            {
                AbrirConexao();
                
                DataTable dtt = new DataTable();

                string sql = @"SELECT * FROM E2.UC_LEIT_COORDENADAS ulc
                                WHERE ulc.IDGRUPOFAT=:grupoFat And ulc.ANO_MES=:mesfat";

                OracleCommand comando = new OracleCommand(sql, this.conexao);
                comando.Parameters.Add(new OracleParameter(":grupoFat", OracleType.Int16)).Value = obj.Remessa;
                comando.Parameters.Add(new OracleParameter(":mesfat", OracleType.VarChar)).Value = obj.Mesfat;
                
                try
                {
                    OracleDataAdapter adapter = new OracleDataAdapter(comando);
                    adapter.Fill(dtt);
                }
                catch (Exception ex)
                {
                    MessageBox.Show("Mensagem do Banco Oracle: " + ex.Message);
                    throw new Exception(ex.Message);
                }

                return dtt;
            }
            finally
            {
                FecharConexao();
            }
        }

        #endregion

        #endregion

    }
}
